package xsched.analysis.wala.util;
import java.util.ArrayList;
import java.util.ConcurrentModificationException;
import java.util.Iterator;
import com.ibm.wala.util.graph.NumberedNodeManager;
import com.ibm.wala.util.intset.IntIterator;
import com.ibm.wala.util.intset.IntSet;
public class SimpleNodeManager<T> implements NumberedNodeManager<T> {
final private ArrayList<T> nodes;
public SimpleNodeManager() {
super();
nodes = new ArrayList<T>();
}
public void addAllNodes(SimpleNodeManager<T> other) {
for(T n : other.nodes) {
addNode(n);
}
}
public Iterator<T> iterator() {
return nodes.iterator();
}
/*
* @see com.ibm.wala.util.graph.NodeManager#getNumberOfNodes()
*/
public int getNumberOfNodes() {
return nodes.size();
}
/*
* @see com.ibm.wala.util.graph.NodeManager#addNode(com.ibm.wala.util.graph.Node)
*/
public void addNode(T n) {
if(! nodes.contains(n))
nodes.add(n);
}
/*
* @see com.ibm.wala.util.graph.NodeManager#remove(com.ibm.wala.util.graph.Node)
*/
public void removeNode(T n) {
nodes.remove(n);
}
/*
* @see com.ibm.wala.util.graph.NodeManager#containsNode(com.ibm.wala.util.graph.Node)
*/
public boolean containsNode(T N) {
return nodes.contains(N);
}
public boolean stateEquals(SimpleNodeManager<T> other) {
if(nodes.size() != other.nodes.size())
return false;
for(T n : nodes) {
if(! other.nodes.contains(n))
return false;
}
return true;
}
@Override
public String toString() {
return nodes.toString();
}
@Override
public int getMaxNumber() {
return nodes.size()-1;
}
@Override
public T getNode(int number) {
return nodes.get(number);
}
@Override
public int getNumber(T N) {
return nodes.indexOf(N);
}
@Override
public Iterator<T> iterateNodes(final IntSet s) {
return new Iterator<T>() {
private final IntIterator it = s.intIterator();
@Override
public boolean hasNext() {
return it.hasNext();
}
@Override
public T next() {
int next = it.next();
return nodes.get(next);
}
@Override
public void remove() {
throw new ConcurrentModificationException();
}
};
}
}